//
//  MPCImageView.h
//  Pods
//
//  Created by 蔡勋 on 2017/7/15.
//
//

#import <UIKit/UIKit.h>
#import "MPCWebImageHeader.h"

NS_ASSUME_NONNULL_BEGIN


@protocol MPCImageViewWebImageProtocol <NSObject>


@end


@class MPCImageView;

/*!
 *  @author caixun
 *  @brief  定制的UIButton，用于获取发起点击事件的imageview
 */
@interface MPCImageViewBtn : UIButton

/// button所添加到的GMBImageView示例，用于点击事件时获取imageview
@property (nonatomic, weak) MPCImageView *imgv;


@end


/*!
 *  @author caixun
 *  @brief  ImageView的基类
 */
@interface MPCImageView : UIImageView

// 扩展属性，携带字典参数
@property (nonatomic, strong) NSMutableDictionary *mdicParam;

// 加载网络图片时是否显示渐变动画
@property (nonatomic, assign, readonly) BOOL isShowDismissAnimated;
// 动画时间
@property (nonatomic, assign, readonly) CGFloat fltAnimDuration;
// 加载网络图片时的占位图片
@property (nonatomic, strong, readonly) UIImage *imgPlaceholder;
// 加载网络图片失败时显示的图片
@property (nonatomic, strong, readonly) UIImage *imgError;
// 是否显示占位图片
@property (nonatomic, assign, readonly) BOOL isShowPlaceholderImg;
// 占位图的显示模式
@property (nonatomic, assign, readonly) UIViewContentMode placeholderImgContentMode;
// 图片下载完成后的显示模式
@property (nonatomic, assign, readonly) UIViewContentMode commonContentMode;

/**
 显示图片时是否显示动画
 */
- (MPCImageView * _Nullable (^_Nullable)(BOOL))showDismissAnimated;
/**
 显示图片动画的显示时间
 */
- (MPCImageView * _Nullable (^_Nullable)(CGFloat))animDuration;
/**
 加载网络图片时的占位图片
 */
- (MPCImageView * _Nullable (^_Nullable)(UIImage *_Nullable))imagePlaceholder;
/**
 加载网络图片失败时显示的图片
 */
- (MPCImageView * _Nullable (^_Nullable)(UIImage *_Nullable))imageError;
/**
 是否显示占位图片
 */
- (MPCImageView * _Nullable (^_Nullable)(BOOL))showPlaceholderImg;
/**
 占位图的显示模式
 */
- (MPCImageView * _Nullable (^_Nullable)(BOOL))placeholderImageContentMode;
/**
 图片下载完成后的显示模式
 */
- (MPCImageView * _Nullable (^_Nullable)(BOOL))selfCommonContentMode;


#pragma mark - ********************************** 初始化方法 工厂方法 *********************************

#pragma mark - 初始化基本设置

/**
 初始化基本设置
 @param frame 大小
 @return MPCImageView对象
 */
+ (instancetype)getWithFrame:(CGRect)frame;


/**
 初始化基本设置
 @param frame 大小
 @param img 图片
 @return MPCImageView对象
 */
+ (instancetype)getWithFrame:(CGRect)frame image:(UIImage *)img;


#pragma mark - ********************************** 初始化方法 实例方法 *********************************

#pragma mark - 初始化基本设置
/**
 初始化基本设置
 @param frame 大小
 @return MPCImageView对象
 */
- (instancetype)initWithFrame:(CGRect)frame
                        image:(UIImage *)img;

/**
 添加点击事件
 @param target target
 @param selAction 点击方法
 */
- (void)addTarget:(id)target action:(SEL)selAction;


#pragma mark - *********************************** 设置属性 实例方法 **********************************

/**
 设置圆角 描边
 @param fltCornerRadius 圆角半径
 @param fltBorderWidth 描边值
 @param colorBorder 描边颜色
 */
- (void)setCornerRadius:(CGFloat)fltCornerRadius
            borderWidth:(CGFloat)fltBorderWidth
            borderColor:(UIColor *)colorBorder;

/*!
 *  @author caixun
 *  @brief  设置圆角 4个角全部进行圆角操作
 *  @param cornerRadius 圆角半径
 */
- (void)setCornerRadiusForAll:(float)cornerRadius;

/*!
 *  @author caixun
 *  @brief  设置圆角 指定某个角进行圆角操作
 *  @param corners     要做圆角操作的角
 *  @param cornerRadii 圆角半径
 */
- (void)setCornerRadiusForPart:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;


/**
 网络图片加载的方法

 */
- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL;

- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL
                              options:(MPWebImageOptions)options
                              success:(nullable MPWebImageSuccessBlock)success
                                 fail:(nullable MPWebImageFailBlock)fail;

- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL
                   options:(MPWebImageOptions)options
                  progress:(nullable MPWebImageDownloaderProgressBlock)progressBlock
                   success:(nullable MPWebImageSuccessBlock)success
                      fail:(nullable MPWebImageFailBlock)fail;


/**
 获取异步线性队列，用于读取硬盘图片

 @return 异步线性队列
 */
+ (dispatch_queue_t)mp_setterQueue;


@end


NS_ASSUME_NONNULL_END
